/**
 * 电气参数查询命令
 * 处理电气参数的查询和响应解析
 */
import BaseCommand from './baseCommand';

class ElectricalDataCommand extends BaseCommand {
  // 命令类型
  static CMD = 0x01;

  /**
   * 创建查询命令
   * @returns {Uint8Array} 查询命令帧
   */
  static createQuery() {
    console.log('[电气参数] 创建查询命令');
    return this.packFrame(this.CMD);
  }

  /**
   * 解析响应数据
   * @param {Uint8Array} frame - 完整的响应帧
   * @returns {Object|null} 解析后的电气参数数据
   */
  static parseResponse(frame) {
    console.log('[电气参数] 开始解析响应');
    
    // 先进行基础帧解析
    const baseResult = this.parseBaseFrame(frame);
    if (!baseResult) return null;

    // 验证命令类型
    if (baseResult.cmd !== this.CMD) {
      console.warn('[电气参数] 命令类型不匹配:', `0x${baseResult.cmd.toString(16)}`, `预期: 0x${this.CMD.toString(16)}`);
      return null;
    }

    if (baseResult.data.length !== 16) {
      console.warn('[电气参数] 数据长度不正确:', baseResult.data.length, '预期: 16');
      return null;
    }

    try {
      // 解析具体数据
      const dataView = new DataView(baseResult.data.buffer, baseResult.data.byteOffset);
      const result = {
        current: Number(dataView.getFloat32(0, true).toFixed(3)),    // 电流 (A)
        voltage: Number(dataView.getFloat32(4, true).toFixed(3)),    // 电压 (V)
        power: Number(dataView.getFloat32(8, true).toFixed(1)),      // 功率 (W)
        kwhTotal: Number(dataView.getFloat32(12, true).toFixed(3)),  // 总电能 (kWh)
      };
      console.log('[电气参数] 解析成功:', result);
      return result;
    } catch (err) {
      console.error('[电气参数] 数据解析错误:', err);
      return null;
    }
  }
}

export default ElectricalDataCommand; 